#include <stdio.h>

struct A{
	short x;
	short y;
	short z;
};

struct B{
	struct A a;
	char b;
	int c;
}; // 12
// 上面例子中 结构体A是2字节对齐的 所以结构体A 本身大小是6字节
// 而将结构体A放在结构体B中时，由于结构体B是按4字节对齐的
// 所以需要给结构体A额外分配2个字节(下图中左侧绿色的部分)来满足结构体B的对齐
// 由于这两个字节是结构体B分配的 所以结果体B的成员可以占用

//----------------------------------------------

struct C{
	int x;
	short y;
};

struct D{
	struct C a;
	char b;
	int c;
}; // 16
// 上面的例子中 结构体C自身就是按照4字节对齐的 所以结构体C本身大小就是8字节
// 把结构体C放在结构体D中时 并没有为了满足D的对齐而额外分配空间
// 也就是说 下图 右侧的绿色部分是结构体C为了满足自身对齐而浪费的
// 此时 结构体D的成员不能占用

int main(int argc, const char *argv[])
{
	printf("sizeof(struct B) = %d\n", sizeof(struct B)); // 12
	printf("sizeof(struct D) = %d\n", sizeof(struct D)); // 16
	
	return 0;
}
